// 1.3 字符串-R 字符串 与 字符串前缀
/**
 * C++ 提供了以下两种类型的字符串表示形式：
 *    C 风格字符串
 *    C++ 引入的 string 类类型
 * 
 * ------------------------
 * R 字符串 与 字符串前缀
 * R"(字符串)" 为默认格式的原始字符串，原始字符串内的字符不进行转义。
 * 
 * 自定义分隔符
 * 分隔符可支持自定义，写在括号外部，左右需要一致，不是所有的字符 除#%^&* 都可以设置为分隔符： R"#%^&*(1231)"123)#%^&*" 
 * 
 * 字符串前缀：
    
    L : 类型 wchar_t      编码 : Unicode
    u : 类型: char16_t    编码 : UTF-16  (C++11)
    U : 类型: char32_t     编码 : UTF-32 (C++11)
    u8 : 类型 char          编码 : UTF-8     (C++11)

 * 
 * 字符串前缀与原始字符串组合：
 * LR"(\t字\b符\r串\n)"
 *
*/

#include <iostream>

int main(void)
{
  std::cout << "\t转义字符串" << std::endl;
  std::cout << R"(\t不转义字符串)" << std::endl;
  std::cout << R"##(\t不转义字符串+分隔符)##" << std::endl;
  std::wcout << L"Unicode \u02C0 字符串" << std::endl; //控制台字符类型为Unicode时，正常输出
  std::wcout << u"utf-16 字符串" << std::endl;         //wcout 不支持的类型，输出地址
  std::wcout << U"utf-32 字符串" << std::endl;         //wcout 不支持的类型，输出地址
  std::cout << u8"utf-8 字符串\u02C0" << std::endl;    //控制台字符类型为UTF-8时，正常输出

  std::cout << u8R"(原始字符串和前缀Unicode混合使用)" << std::endl;
  printf("-----------end-------------\n");
  return 0;
}
